getDrawable(int) 在这一行中被弃用警告:Drawable res = getContext().getResources().getDrawable(item.img_resId);
getDrawable(int) is deprecated warning in this line: Drawable res = getContext().getResources().getDrawable(item.img_resId);
我已经创建了自己的自定义适配器。在此代码中,我在这一行中收到 getDrawable(int) is deprecated 警告:Drawable res = getContext().getResources().getDrawable(item.img_resId);
.
我经历了这些:
Android getResources().getDrawable() 已弃用 API 22
Android:context.getDrawable() 的替代方法
但其中 none 对我有用。
我的代码:
public class CustomAdapter extends ArrayAdapter<ItemDataObject> {
private static class ViewHolder {
ImageView img;
TextView title;
TextView sub_title;
}
public CustomAdapter(Context context, ArrayList<ItemDataObject> list_item_details) {
super(context, 0, list_item_details);
}
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
// Get the data item for this position
ItemDataObject item = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
ViewHolder viewHolder; // view lookup cache stored in tag
if (convertView == null) {
// If there's no view to re-use, inflate a brand new view for row
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.listview_item, parent, false);
viewHolder.img = convertView.findViewById(R.id.img);
viewHolder.title = convertView.findViewById(R.id.tvTitle);
viewHolder.sub_title = convertView.findViewById(R.id.tvSubTitle);
// Cache the viewHolder object inside the fresh view
convertView.setTag(viewHolder);
} else {
// View is being recycled, retrieve the viewHolder object from tag
viewHolder = (ViewHolder) convertView.getTag();
}
// Populate the data from the data object via the viewHolder object into the template view.
assert item != null;
Drawable res = getContext().getResources().getDrawable(item.img_resId);
viewHolder.img.setImageDrawable(res);
viewHolder.title.setText(item.title);
viewHolder.sub_title.setText(item.subtitle);
// Return the completed view to render on screen
return convertView;
}
}
现在你应该使用
Drawable drawable = ContextCompat.getDrawable(this,R.drawable.my_drawable);
如果您使用的是小部件,this
是您传递的 context
,如果您是从 Activity 调用,则只是 this
,或者 getActivity()
如果您是从 Fragment
调用
在您的情况下,当您初始化 Widget 时,还会保存您的 Context
实例:
Context context;
public CustomAdapter(Context context, ArrayList<ItemDataObject> list_item_details) {
super(context, 0, list_item_details);
this.context = context;
}
现在您可以拨打:
Drawable drawable = ContextCompat.getDrawable(context,R.drawable.my_drawable);
我已经创建了自己的自定义适配器。在此代码中,我在这一行中收到 getDrawable(int) is deprecated 警告:Drawable res = getContext().getResources().getDrawable(item.img_resId);
.
我经历了这些:
Android getResources().getDrawable() 已弃用 API 22
Android:context.getDrawable() 的替代方法
但其中 none 对我有用。
我的代码:
public class CustomAdapter extends ArrayAdapter<ItemDataObject> {
private static class ViewHolder {
ImageView img;
TextView title;
TextView sub_title;
}
public CustomAdapter(Context context, ArrayList<ItemDataObject> list_item_details) {
super(context, 0, list_item_details);
}
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
// Get the data item for this position
ItemDataObject item = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
ViewHolder viewHolder; // view lookup cache stored in tag
if (convertView == null) {
// If there's no view to re-use, inflate a brand new view for row
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.listview_item, parent, false);
viewHolder.img = convertView.findViewById(R.id.img);
viewHolder.title = convertView.findViewById(R.id.tvTitle);
viewHolder.sub_title = convertView.findViewById(R.id.tvSubTitle);
// Cache the viewHolder object inside the fresh view
convertView.setTag(viewHolder);
} else {
// View is being recycled, retrieve the viewHolder object from tag
viewHolder = (ViewHolder) convertView.getTag();
}
// Populate the data from the data object via the viewHolder object into the template view.
assert item != null;
Drawable res = getContext().getResources().getDrawable(item.img_resId);
viewHolder.img.setImageDrawable(res);
viewHolder.title.setText(item.title);
viewHolder.sub_title.setText(item.subtitle);
// Return the completed view to render on screen
return convertView;
}
}
现在你应该使用
Drawable drawable = ContextCompat.getDrawable(this,R.drawable.my_drawable);
如果您使用的是小部件,this
是您传递的 context
,如果您是从 Activity 调用,则只是 this
,或者 getActivity()
如果您是从 Fragment
在您的情况下,当您初始化 Widget 时,还会保存您的 Context
实例:
Context context;
public CustomAdapter(Context context, ArrayList<ItemDataObject> list_item_details) {
super(context, 0, list_item_details);
this.context = context;
}
现在您可以拨打:
Drawable drawable = ContextCompat.getDrawable(context,R.drawable.my_drawable);